﻿import flash.events.Event;
import flash.net.FileReference;
import flash.net.FileReferenceList;
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.managers.PopUpManager;

private var filePeeker : FileReferenceList;

[Bindable]
private var archivos : ArrayCollection;

[Bindable]
private var contenido : XML;

public var refresh : Function;

public function cambiarContenido(c : XML) : void {
	contenido = c;
}

private function agregarArchivo() : void {
	filePeeker = new FileReferenceList();
	filePeeker.addEventListener(Event.SELECT, archivoSeleccionado);
	filePeeker.browse();
}

private function archivoSeleccionado(evento : Event) : void {
	var archivo : FileReference;
	var i : int;
	for (i = 0; i < filePeeker.fileList.length; i++) {
		agregarReferencia(filePeeker.fileList[i]);
	}
	
	archivosList.selectedIndex = archivos.length - 1;
}

private function agregarReferencia(archivo : FileReference) : void {
	if (archivo.name == "Thumbs.db") return;
	
	if (archivos == null) {
		archivos = new ArrayCollection();
	}
	
	var encontrado : Boolean = false;
	var i : int;
	for (i = 0; i < archivos.length; i++) {
		var ea : FileReference = archivos[i] as FileReference;
		
		if (archivo.name == ea.name) {
			encontrado = true;
			break;
		}
	}
	
	if (encontrado == false) {
		archivos.addItem(archivo);
	}
}

private function quitar() : void {
	if (archivosList.selectedItem != null) {
		archivos.removeItemAt(archivosList.selectedIndex);
	}
}

private function quitarTodos() : void {
	archivos.removeAll();
}

private function cerrarVentana() : void {
	PopUpManager.removePopUp(this);
	refresh();
}

private function sessionResult() : void {
	var d : XML = sessionHttp.lastResult as XML;
	var forma : FormaUploadProgress = PopUpManager.createPopUp(this, FormaUploadProgress, true) as FormaUploadProgress;
	PopUpManager.centerPopUp(forma);
	forma.terminado = terminado;
	forma.upload(d.session[0].@id, contenido, archivos, comentarios.text);
}

private function httpError(o : Object) : void {
	Alert.show("Error al contactar al servidor", "Error");
}

private function subirArchivos() : void {
	sessionHttp.send();
}

private function terminado(a : mx.collections.ArrayCollection) : void {
	var i : int;
	var j : int;
	for (i = 0; i < a.length; i++) {
		var ufi : UploadFileItem = a[i] as UploadFileItem;
		if (ufi.estatus == "Completado") {
			for (j = 0; j < archivos.length; j++) {
				var fr : FileReference = archivos[j] as FileReference;
				
				if (ufi.name == fr.name) {
					archivos.removeItemAt(j);
					break;
				}
			}
		}
	}
	
	if (archivos.length == 0) {
		Alert.show("Todos los archivos han sido enviados con exito", "Exito");
		
		cerrarVentana();
	} else {
		Alert.show("Algunos archivos no han podido ser subidos por alguna razon", "Error");
	}
}

